 #-*- coding: utf-8 -*-

 ###############################################
 ##                                             ##
 ##   Ejemplo de uso de CFDI                     ##
 ##                                              ##
 ##                                              ##
 ##                                              ##
 ##   by Críptidos Digitales                     ##
 ##   GPL (c)2010                                ##
  ##                                             ##
    ###############################################

"""
This module contents an example using cfdi module for creating a
Comprobante Fiscal Digital por Internet, required by SAT México
"""

from ordereddict import OrderedDict

import datetime

import cfdi


if __name__ == "__main__":
    
    ## Datos de un comprobante ejemplo
    data = OrderedDict()
    
    data['version'] = "2.0"
    data['serie'] = "A"
    data['folio'] = "1"
    data['fecha'] = "2010-12-18T15:27:13"
    data['sello'] = ""
    data['noAprobacion'] = "1"
    data['anoAprobacion'] = "2006"
    data['tipoDeComprobante'] = "ingreso"
    data['formaDePago'] = "Contado en una sola exibicion"
    data['noCertificado'] = "00001000000100000001"
    data['certificado'] = ""
    data['subTotal'] = "21500.00"
    data['descuento'] = "0"
    data['total'] = "24940.00"
    
    emisor = OrderedDict()
    emisor['rfc'] = "CAJU010166K67"
    emisor['nombre'] = "Juan Cama Nei"
    
    domicilioFiscal = OrderedDict()
    domicilioFiscal['calle'] = "Av. Sal Si Puedes"
    domicilioFiscal['noExterior'] = "13"
    domicilioFiscal['noInterior'] = "666"
    domicilioFiscal['colonia'] = "Morelos"
    domicilioFiscal['localidad'] = "Distrito Federal"
    domicilioFiscal['municipio'] = "Cuauhtemoc"
    domicilioFiscal['estado'] = "Distrito Federal"
    domicilioFiscal['pais'] = "Mexico"
    domicilioFiscal['codigoPostal'] = "06000"
    
    emisor['DomicilioFiscal'] = domicilioFiscal
    
    expedidoEn = OrderedDict()
    
    expedidoEn['calle'] = "Av. Sal Si Puedes 13"
    expedidoEn['localidad'] = "Distrito Federal"
    expedidoEn['municipio'] = "Cuauhtemoc"
    expedidoEn['estado'] = "Distrito Federal"
    expedidoEn['pais'] = "Mexico"
    expedidoEn['codigoPostal'] = "06000"
    
    emisor['ExpedidoEn'] = expedidoEn
    
    data['Emisor'] = emisor
 
    receptor = OrderedDict()
    receptor['rfc'] = "ROAF641217Q94"
    receptor['nombre'] = "Fernando -El Pop-"
    
    domicilio = OrderedDict()
    domicilio['calle'] = "Av. Division del Norte"
    domicilio['noExterior'] = "69"
    domicilio['noInterior'] = "1"
    domicilio['colonia'] = "Letran-Valle"
    domicilio['localidad'] = "Distrito Federal"
    domicilio['municipio'] = "Benito Juarez"
    domicilio['estado'] = "Distrito Federal"
    domicilio['pais'] = "Mexico"
    domicilio['codigoPostal'] = "03650"
    
    receptor['Domicilio'] = domicilio
    
    data['Receptor'] = receptor
    
    conceptos = OrderedDict()
    
    concepto = OrderedDict()
    concepto['cantidad'] = "1"
    concepto['descripcion'] = "Servicios Profesionales"
    concepto['valorUnitario'] = "21500.00"
    concepto['importe'] = "3440.00"
    
    conceptos['Concepto'] = concepto
 
    data['Conceptos'] = conceptos
    
    impuestos = OrderedDict()
    impuestos['totalImpuestosTrasladados'] = "3440.00"
    
    traslados = OrderedDict()
    
    traslado = OrderedDict()
    traslado['impuesto'] = "IVA"
    traslado['tasa'] = "16.00"
    traslado['importe'] = "3440.00"
    
    traslados['Traslado'] = traslado
    
    impuestos['Traslados'] = traslados
    
    data['Impuestos'] = impuestos
    
    print '\ndata :\n', data
    
    factura, msg = cfdi.createFactura(data, version=2, archivoDeCertificado='aaa010101aaa_csd_08.cer', archivoDeLlave='aaa010101aaa_csd_08.key', contrasena='Contrasena de Clave Privada.txt')
    
    print '\nfactura :\n', factura
    
    cfdi.save(factura, 'factura.xml')
    
    
    
    